<?php

/**
 * The class handles the actions in WP 
 */
class SQ_HookController {
	
	/** @var array the WP actions list from admin */
	private $admin_hooks = array(); 
        private $custom_hooks = array(); 
        private $block_hooks = array(); 
	
	public function __construct(){
		
		$this->admin_hooks = array('init'=> 'admin_init',
                                            'head' => 'admin_head',
                                            'footer' => 'admin_footer',
                                            'wmenu'=> '_admin_menu',
                                            'menu'=> 'admin_menu',
                                            'submenu'=> 'add_submenu_page',
                    
                                           // 'savePost'=> 'save_post',
                    
                                            'xml'=> 'admin_xml_ns',
                                            'scripts'=> 'admin_enqueue_scripts',
                                            'notices'=> 'admin_notices',
                                            'shutdown'=>'shutdown',
                    
                                            'fronthead' => 'wp_head',
                                            'frontfooter' => 'wp_footer',
                                            'frontinit'=> 'init'
                                           );
                $this->custom_hooks = array();
		$this->block_hooks = array('getContent'=> 'getContent');
	}
	
	/**
	 * Calls the specified action in WP
	 *@param oject $instance The parent class instance
	 *
	 *@return void
	 */
	public function setAdminHooks($instance){
		
		/* for each admin action check if is defined in class and call it */
		foreach ($this->admin_hooks as $hook => $value){
			
			if(is_callable(array($instance,'hook'.ucfirst($hook)))){
				//echo $value . '<br>';
				//print_r(array($instance, 'hook'.ucfirst($hook)));
				//call the WP add_action function
			 	add_action($value, array($instance, 'hook'.ucfirst($hook)),1);
			}
		}
                
                /* for each custom action check if is defined in class and call it */
		foreach ($this->custom_hooks as $hook => $value){
			
			if(is_callable(array($instance,'hook'.ucfirst($hook)))){
				//call the controller custom hook function
                            
			 	call_user_func(array($instance, 'hook'.ucfirst($hook)));
			}
		}
	}
	
	/**
	 * Calls the specified action in WP
	 *@param string $action
	 *@param array $callback Contains the class name or object and the callback function
	 *
	 *@return void
	 */
	public function setAction($action, $obj, $callback){
           
		/* calls the custom action function from WP */
		add_action($action, array($obj, $callback), 10);
	}
	
	/**
	 * Calls the specified action in WP
	 *@param oject $instance The parent class instance
	 *
	 *@return void
	 */
	public function setBlockHooks($instance){
		$param_arr = array();
		
		/* for each admin action check if is defined in class and call it */
		foreach ($this->block_hooks as $hook => $value)
			if(is_callable(array($instance,'hook'.ucfirst($hook))))
				call_user_func_array(array($instance,'hook'.ucfirst($hook)), $param_arr);
	}	
	
}

?>